Skip to content

Update software stack to NEO v25.27.34303 #513

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: master
Choose a base branch
from

Conversation

michel2323
Copy link

@michel2323 michel2323 commented Aug 6, 2025

Edit: I reported local issues which just a wrong setting.

Copy link
Contributor

Your PR requires formatting changes to meet the project's style guidelines.
Please consider running Runic (git runic master) to apply these changes.

Click here to view the suggested changes.
diff --git a/deps/generate_helpers.jl b/deps/generate_helpers.jl
index 01f162d..5e715db 100644
--- a/deps/generate_helpers.jl
+++ b/deps/generate_helpers.jl
@@ -1,6 +1,6 @@
 non_parametric_routines = ["init_matrix_handle", "release_matrix_handle", "set_matrix_property",
 "init_matmat_descr", "release_matmat_descr", "set_matmat_data", "get_matmat_data", "matmat",
-"omatcopy", "sort_matrix", "optimize_gemv", "optimize_gemm", "optimize_trmv", "optimize_trsv", "optimize_trsm",
+    "omatcopy", "sort_matrix", "optimize_gemv", "optimize_gemm", "optimize_trmv", "optimize_trsv", "optimize_trsm",
 "init_omatconvert_descr", "release_omatconvert_descr", "init_omatadd_descr", "release_omatadd_descr",
 "omatconvert_buffer_size", "omatconvert_analyze", "omatconvert_get_nnz", "omatconvert",
 "omatadd_buffer_size", "omatadd_analyze", "omatadd_get_nnz"]
diff --git a/deps/generate_interfaces.jl b/deps/generate_interfaces.jl
index a36fd0a..470c451 100644
--- a/deps/generate_interfaces.jl
+++ b/deps/generate_interfaces.jl
@@ -241,7 +241,7 @@ function generate_headers(library::String, filename::Vector{String}, output::Str
         # The routine "optimize_trsm" has two versions.
         suffix = ""
         (name_routine == "optimize_trsm") && occursin("columns", header) && (suffix = "_advanced")
-        (name_routine == "optimize_gemm") && occursin("columns", header) && (suffix = "_advanced")
+                (name_routine == "optimize_gemm") && occursin("columns", header) && (suffix = "_advanced")
         name_routine ∈ ("set_csr_data", "set_coo_data") && occursin("int64_t", header) && (suffix = "_64")
         occursin("batch", name_routine) && !occursin("**", header) && (suffix = "_strided")
 
diff --git a/lib/level-zero/libze.jl b/lib/level-zero/libze.jl
index d8ad0b8..167a511 100644
--- a/lib/level-zero/libze.jl
+++ b/lib/level-zero/libze.jl
@@ -11,7 +11,8 @@ end
 
 function check(f)
     res = retry_reclaim(err -> err == RESULT_ERROR_OUT_OF_HOST_MEMORY ||
-                               err == RESULT_ERROR_OUT_OF_DEVICE_MEMORY) do
+            err == RESULT_ERROR_OUT_OF_DEVICE_MEMORY
+    ) do
         return f()
     end
 
@@ -2164,9 +2165,11 @@ end
 const ze_init_driver_type_flag_t = _ze_init_driver_type_flag_t
 
 @checked function zeInitDrivers(pCount, phDrivers, desc)
-    @ccall libze_loader.zeInitDrivers(pCount::Ptr{UInt32},
-                                      phDrivers::Ptr{ze_driver_handle_t},
-                                      desc::Ptr{ze_init_driver_type_desc_t})::ze_result_t
+    @ccall libze_loader.zeInitDrivers(
+        pCount::Ptr{UInt32},
+        phDrivers::Ptr{ze_driver_handle_t},
+        desc::Ptr{ze_init_driver_type_desc_t}
+    )::ze_result_t
 end
 
 @cenum _ze_api_version_t::UInt32 begin
@@ -3444,9 +3447,11 @@ end
 const ze_kernel_get_binary_exp_version_t = _ze_kernel_get_binary_exp_version_t
 
 @checked function zeKernelGetBinaryExp(hKernel, pSize, pKernelBinary)
-    @ccall libze_loader.zeKernelGetBinaryExp(hKernel::ze_kernel_handle_t,
-                                             pSize::Ptr{Csize_t},
-                                             pKernelBinary::Ptr{UInt8})::ze_result_t
+    @ccall libze_loader.zeKernelGetBinaryExp(
+        hKernel::ze_kernel_handle_t,
+        pSize::Ptr{Csize_t},
+        pKernelBinary::Ptr{UInt8}
+    )::ze_result_t
 end
 
 @cenum _ze_driver_ddi_handles_ext_version_t::UInt32 begin
@@ -3492,39 +3497,49 @@ end
 const ze_external_semaphore_ext_flag_t = _ze_external_semaphore_ext_flag_t
 
 @checked function zeDeviceImportExternalSemaphoreExt(hDevice, desc, phSemaphore)
-    @ccall libze_loader.zeDeviceImportExternalSemaphoreExt(hDevice::ze_device_handle_t,
-                                                           desc::Ptr{ze_external_semaphore_ext_desc_t},
-                                                           phSemaphore::Ptr{ze_external_semaphore_ext_handle_t})::ze_result_t
+    @ccall libze_loader.zeDeviceImportExternalSemaphoreExt(
+        hDevice::ze_device_handle_t,
+        desc::Ptr{ze_external_semaphore_ext_desc_t},
+        phSemaphore::Ptr{ze_external_semaphore_ext_handle_t}
+    )::ze_result_t
 end
 
 @checked function zeDeviceReleaseExternalSemaphoreExt(hSemaphore)
     @ccall libze_loader.zeDeviceReleaseExternalSemaphoreExt(hSemaphore::ze_external_semaphore_ext_handle_t)::ze_result_t
 end
 
-@checked function zeCommandListAppendSignalExternalSemaphoreExt(hCommandList, numSemaphores,
-                                                                phSemaphores, signalParams,
-                                                                hSignalEvent, numWaitEvents,
-                                                                phWaitEvents)
-    @ccall libze_loader.zeCommandListAppendSignalExternalSemaphoreExt(hCommandList::ze_command_list_handle_t,
-                                                                      numSemaphores::UInt32,
-                                                                      phSemaphores::Ptr{ze_external_semaphore_ext_handle_t},
-                                                                      signalParams::Ptr{ze_external_semaphore_signal_params_ext_t},
-                                                                      hSignalEvent::ze_event_handle_t,
-                                                                      numWaitEvents::UInt32,
-                                                                      phWaitEvents::Ptr{ze_event_handle_t})::ze_result_t
-end
-
-@checked function zeCommandListAppendWaitExternalSemaphoreExt(hCommandList, numSemaphores,
-                                                              phSemaphores, waitParams,
-                                                              hSignalEvent, numWaitEvents,
-                                                              phWaitEvents)
-    @ccall libze_loader.zeCommandListAppendWaitExternalSemaphoreExt(hCommandList::ze_command_list_handle_t,
-                                                                    numSemaphores::UInt32,
-                                                                    phSemaphores::Ptr{ze_external_semaphore_ext_handle_t},
-                                                                    waitParams::Ptr{ze_external_semaphore_wait_params_ext_t},
-                                                                    hSignalEvent::ze_event_handle_t,
-                                                                    numWaitEvents::UInt32,
-                                                                    phWaitEvents::Ptr{ze_event_handle_t})::ze_result_t
+@checked function zeCommandListAppendSignalExternalSemaphoreExt(
+        hCommandList, numSemaphores,
+        phSemaphores, signalParams,
+        hSignalEvent, numWaitEvents,
+        phWaitEvents
+    )
+    @ccall libze_loader.zeCommandListAppendSignalExternalSemaphoreExt(
+        hCommandList::ze_command_list_handle_t,
+        numSemaphores::UInt32,
+        phSemaphores::Ptr{ze_external_semaphore_ext_handle_t},
+        signalParams::Ptr{ze_external_semaphore_signal_params_ext_t},
+        hSignalEvent::ze_event_handle_t,
+        numWaitEvents::UInt32,
+        phWaitEvents::Ptr{ze_event_handle_t}
+    )::ze_result_t
+end
+
+@checked function zeCommandListAppendWaitExternalSemaphoreExt(
+        hCommandList, numSemaphores,
+        phSemaphores, waitParams,
+        hSignalEvent, numWaitEvents,
+        phWaitEvents
+    )
+    @ccall libze_loader.zeCommandListAppendWaitExternalSemaphoreExt(
+        hCommandList::ze_command_list_handle_t,
+        numSemaphores::UInt32,
+        phSemaphores::Ptr{ze_external_semaphore_ext_handle_t},
+        waitParams::Ptr{ze_external_semaphore_wait_params_ext_t},
+        hSignalEvent::ze_event_handle_t,
+        numWaitEvents::UInt32,
+        phWaitEvents::Ptr{ze_event_handle_t}
+    )::ze_result_t
 end
 
 @cenum _ze_device_cache_line_size_ext_version_t::UInt32 begin
@@ -3617,50 +3632,66 @@ mutable struct _ze_rtas_parallel_operation_ext_handle_t end
 const ze_rtas_parallel_operation_ext_handle_t = Ptr{_ze_rtas_parallel_operation_ext_handle_t}
 
 @checked function zeRTASBuilderCreateExt(hDriver, pDescriptor, phBuilder)
-    @ccall libze_loader.zeRTASBuilderCreateExt(hDriver::ze_driver_handle_t,
-                                               pDescriptor::Ptr{ze_rtas_builder_ext_desc_t},
-                                               phBuilder::Ptr{ze_rtas_builder_ext_handle_t})::ze_result_t
+    @ccall libze_loader.zeRTASBuilderCreateExt(
+        hDriver::ze_driver_handle_t,
+        pDescriptor::Ptr{ze_rtas_builder_ext_desc_t},
+        phBuilder::Ptr{ze_rtas_builder_ext_handle_t}
+    )::ze_result_t
 end
 
-@checked function zeRTASBuilderGetBuildPropertiesExt(hBuilder, pBuildOpDescriptor,
-                                                     pProperties)
-    @ccall libze_loader.zeRTASBuilderGetBuildPropertiesExt(hBuilder::ze_rtas_builder_ext_handle_t,
-                                                           pBuildOpDescriptor::Ptr{ze_rtas_builder_build_op_ext_desc_t},
-                                                           pProperties::Ptr{ze_rtas_builder_ext_properties_t})::ze_result_t
+@checked function zeRTASBuilderGetBuildPropertiesExt(
+        hBuilder, pBuildOpDescriptor,
+        pProperties
+    )
+    @ccall libze_loader.zeRTASBuilderGetBuildPropertiesExt(
+        hBuilder::ze_rtas_builder_ext_handle_t,
+        pBuildOpDescriptor::Ptr{ze_rtas_builder_build_op_ext_desc_t},
+        pProperties::Ptr{ze_rtas_builder_ext_properties_t}
+    )::ze_result_t
 end
 
 @checked function zeDriverRTASFormatCompatibilityCheckExt(hDriver, rtasFormatA, rtasFormatB)
-    @ccall libze_loader.zeDriverRTASFormatCompatibilityCheckExt(hDriver::ze_driver_handle_t,
-                                                                rtasFormatA::ze_rtas_format_ext_t,
-                                                                rtasFormatB::ze_rtas_format_ext_t)::ze_result_t
-end
-
-@checked function zeRTASBuilderBuildExt(hBuilder, pBuildOpDescriptor, pScratchBuffer,
-                                        scratchBufferSizeBytes, pRtasBuffer,
-                                        rtasBufferSizeBytes, hParallelOperation,
-                                        pBuildUserPtr, pBounds, pRtasBufferSizeBytes)
-    @ccall libze_loader.zeRTASBuilderBuildExt(hBuilder::ze_rtas_builder_ext_handle_t,
-                                              pBuildOpDescriptor::Ptr{ze_rtas_builder_build_op_ext_desc_t},
-                                              pScratchBuffer::Ptr{Cvoid},
-                                              scratchBufferSizeBytes::Csize_t,
-                                              pRtasBuffer::Ptr{Cvoid},
-                                              rtasBufferSizeBytes::Csize_t,
-                                              hParallelOperation::ze_rtas_parallel_operation_ext_handle_t,
-                                              pBuildUserPtr::Ptr{Cvoid},
-                                              pBounds::Ptr{ze_rtas_aabb_ext_t},
-                                              pRtasBufferSizeBytes::Ptr{Csize_t})::ze_result_t
-end
-
-@checked function zeRTASBuilderCommandListAppendCopyExt(hCommandList, dstptr, srcptr, size,
-                                                        hSignalEvent, numWaitEvents,
-                                                        phWaitEvents)
-    @ccall libze_loader.zeRTASBuilderCommandListAppendCopyExt(hCommandList::ze_command_list_handle_t,
-                                                              dstptr::Ptr{Cvoid},
-                                                              srcptr::Ptr{Cvoid},
-                                                              size::Csize_t,
-                                                              hSignalEvent::ze_event_handle_t,
-                                                              numWaitEvents::UInt32,
-                                                              phWaitEvents::Ptr{ze_event_handle_t})::ze_result_t
+    @ccall libze_loader.zeDriverRTASFormatCompatibilityCheckExt(
+        hDriver::ze_driver_handle_t,
+        rtasFormatA::ze_rtas_format_ext_t,
+        rtasFormatB::ze_rtas_format_ext_t
+    )::ze_result_t
+end
+
+@checked function zeRTASBuilderBuildExt(
+        hBuilder, pBuildOpDescriptor, pScratchBuffer,
+        scratchBufferSizeBytes, pRtasBuffer,
+        rtasBufferSizeBytes, hParallelOperation,
+        pBuildUserPtr, pBounds, pRtasBufferSizeBytes
+    )
+    @ccall libze_loader.zeRTASBuilderBuildExt(
+        hBuilder::ze_rtas_builder_ext_handle_t,
+        pBuildOpDescriptor::Ptr{ze_rtas_builder_build_op_ext_desc_t},
+        pScratchBuffer::Ptr{Cvoid},
+        scratchBufferSizeBytes::Csize_t,
+        pRtasBuffer::Ptr{Cvoid},
+        rtasBufferSizeBytes::Csize_t,
+        hParallelOperation::ze_rtas_parallel_operation_ext_handle_t,
+        pBuildUserPtr::Ptr{Cvoid},
+        pBounds::Ptr{ze_rtas_aabb_ext_t},
+        pRtasBufferSizeBytes::Ptr{Csize_t}
+    )::ze_result_t
+end
+
+@checked function zeRTASBuilderCommandListAppendCopyExt(
+        hCommandList, dstptr, srcptr, size,
+        hSignalEvent, numWaitEvents,
+        phWaitEvents
+    )
+    @ccall libze_loader.zeRTASBuilderCommandListAppendCopyExt(
+        hCommandList::ze_command_list_handle_t,
+        dstptr::Ptr{Cvoid},
+        srcptr::Ptr{Cvoid},
+        size::Csize_t,
+        hSignalEvent::ze_event_handle_t,
+        numWaitEvents::UInt32,
+        phWaitEvents::Ptr{ze_event_handle_t}
+    )::ze_result_t
 end
 
 @checked function zeRTASBuilderDestroyExt(hBuilder)
@@ -3668,13 +3699,17 @@ end
 end
 
 @checked function zeRTASParallelOperationCreateExt(hDriver, phParallelOperation)
-    @ccall libze_loader.zeRTASParallelOperationCreateExt(hDriver::ze_driver_handle_t,
-                                                         phParallelOperation::Ptr{ze_rtas_parallel_operation_ext_handle_t})::ze_result_t
+    @ccall libze_loader.zeRTASParallelOperationCreateExt(
+        hDriver::ze_driver_handle_t,
+        phParallelOperation::Ptr{ze_rtas_parallel_operation_ext_handle_t}
+    )::ze_result_t
 end
 
 @checked function zeRTASParallelOperationGetPropertiesExt(hParallelOperation, pProperties)
-    @ccall libze_loader.zeRTASParallelOperationGetPropertiesExt(hParallelOperation::ze_rtas_parallel_operation_ext_handle_t,
-                                                                pProperties::Ptr{ze_rtas_parallel_operation_ext_properties_t})::ze_result_t
+    @ccall libze_loader.zeRTASParallelOperationGetPropertiesExt(
+        hParallelOperation::ze_rtas_parallel_operation_ext_handle_t,
+        pProperties::Ptr{ze_rtas_parallel_operation_ext_properties_t}
+    )::ze_result_t
 end
 
 @checked function zeRTASParallelOperationJoinExt(hParallelOperation)
@@ -3693,11 +3728,15 @@ end
 
 const ze_device_vector_sizes_ext_version_t = _ze_device_vector_sizes_ext_version_t
 
-@checked function zeDeviceGetVectorWidthPropertiesExt(hDevice, pCount,
-                                                      pVectorWidthProperties)
-    @ccall libze_loader.zeDeviceGetVectorWidthPropertiesExt(hDevice::ze_device_handle_t,
-                                                            pCount::Ptr{UInt32},
-                                                            pVectorWidthProperties::Ptr{ze_device_vector_width_properties_ext_t})::ze_result_t
+@checked function zeDeviceGetVectorWidthPropertiesExt(
+        hDevice, pCount,
+        pVectorWidthProperties
+    )
+    @ccall libze_loader.zeDeviceGetVectorWidthPropertiesExt(
+        hDevice::ze_device_handle_t,
+        pCount::Ptr{UInt32},
+        pVectorWidthProperties::Ptr{ze_device_vector_width_properties_ext_t}
+    )::ze_result_t
 end
 
 @cenum _ze_cache_reservation_ext_version_t::UInt32 begin
@@ -4376,14 +4415,18 @@ const ze_mutable_command_list_exp_flag_t = _ze_mutable_command_list_exp_flag_t
                                                          pCommandId::Ptr{UInt64})::ze_result_t
 end
 
-@checked function zeCommandListGetNextCommandIdWithKernelsExp(hCommandList, desc,
-                                                              numKernels, phKernels,
-                                                              pCommandId)
-    @ccall libze_loader.zeCommandListGetNextCommandIdWithKernelsExp(hCommandList::ze_command_list_handle_t,
-                                                                    desc::Ptr{ze_mutable_command_id_exp_desc_t},
-                                                                    numKernels::UInt32,
-                                                                    phKernels::Ptr{ze_kernel_handle_t},
-                                                                    pCommandId::Ptr{UInt64})::ze_result_t
+@checked function zeCommandListGetNextCommandIdWithKernelsExp(
+        hCommandList, desc,
+        numKernels, phKernels,
+        pCommandId
+    )
+    @ccall libze_loader.zeCommandListGetNextCommandIdWithKernelsExp(
+        hCommandList::ze_command_list_handle_t,
+        desc::Ptr{ze_mutable_command_id_exp_desc_t},
+        numKernels::UInt32,
+        phKernels::Ptr{ze_kernel_handle_t},
+        pCommandId::Ptr{UInt64}
+    )::ze_result_t
 end
 
 @checked function zeCommandListUpdateMutableCommandsExp(hCommandList, desc)
@@ -4407,12 +4450,16 @@ end
                                                                        phWaitEvents::Ptr{ze_event_handle_t})::ze_result_t
 end
 
-@checked function zeCommandListUpdateMutableCommandKernelsExp(hCommandList, numKernels,
-                                                              pCommandId, phKernels)
-    @ccall libze_loader.zeCommandListUpdateMutableCommandKernelsExp(hCommandList::ze_command_list_handle_t,
-                                                                    numKernels::UInt32,
-                                                                    pCommandId::Ptr{UInt64},
-                                                                    phKernels::Ptr{ze_kernel_handle_t})::ze_result_t
+@checked function zeCommandListUpdateMutableCommandKernelsExp(
+        hCommandList, numKernels,
+        pCommandId, phKernels
+    )
+    @ccall libze_loader.zeCommandListUpdateMutableCommandKernelsExp(
+        hCommandList::ze_command_list_handle_t,
+        numKernels::UInt32,
+        pCommandId::Ptr{UInt64},
+        phKernels::Ptr{ze_kernel_handle_t}
+    )::ze_result_t
 end
 
 struct _ze_init_params_t
diff --git a/lib/support/liboneapi_support.jl b/lib/support/liboneapi_support.jl
index 9b5858f..29bc6f1 100644
--- a/lib/support/liboneapi_support.jl
+++ b/lib/support/liboneapi_support.jl
@@ -6613,23 +6613,31 @@ function onemklXsparse_release_matmat_descr(p_desc)
 end
 
 function onemklXsparse_init_omatconvert_descr(device_queue, p_descr)
-    @ccall liboneapi_support.onemklXsparse_init_omatconvert_descr(device_queue::syclQueue_t,
-                                                                  p_descr::Ptr{omatconvert_descr_t})::Cint
+    return @ccall liboneapi_support.onemklXsparse_init_omatconvert_descr(
+        device_queue::syclQueue_t,
+        p_descr::Ptr{omatconvert_descr_t}
+    )::Cint
 end
 
 function onemklXsparse_release_omatconvert_descr(device_queue, descr)
-    @ccall liboneapi_support.onemklXsparse_release_omatconvert_descr(device_queue::syclQueue_t,
-                                                                     descr::omatconvert_descr_t)::Cint
+    return @ccall liboneapi_support.onemklXsparse_release_omatconvert_descr(
+        device_queue::syclQueue_t,
+        descr::omatconvert_descr_t
+    )::Cint
 end
 
 function onemklXsparse_init_omatadd_descr(device_queue, p_omatadd_desc)
-    @ccall liboneapi_support.onemklXsparse_init_omatadd_descr(device_queue::syclQueue_t,
-                                                              p_omatadd_desc::Ptr{omatadd_descr_t})::Cint
+    return @ccall liboneapi_support.onemklXsparse_init_omatadd_descr(
+        device_queue::syclQueue_t,
+        p_omatadd_desc::Ptr{omatadd_descr_t}
+    )::Cint
 end
 
 function onemklXsparse_release_omatadd_descr(device_queue, omatadd_desc)
-    @ccall liboneapi_support.onemklXsparse_release_omatadd_descr(device_queue::syclQueue_t,
-                                                                 omatadd_desc::omatadd_descr_t)::Cint
+    return @ccall liboneapi_support.onemklXsparse_release_omatadd_descr(
+        device_queue::syclQueue_t,
+        omatadd_desc::omatadd_descr_t
+    )::Cint
 end
 
 function onemklXsparse_omatcopy(device_queue, transpose_val, spMat_in, spMat_out)
@@ -6695,19 +6703,25 @@ function onemklXsparse_optimize_trsv(device_queue, uplo_val, opA, diag_val, A)
 end
 
 function onemklXsparse_optimize_gemm(device_queue, opA, A)
-    @ccall liboneapi_support.onemklXsparse_optimize_gemm(device_queue::syclQueue_t,
-                                                         opA::onemklTranspose,
-                                                         A::matrix_handle_t)::Cint
-end
-
-function onemklXsparse_optimize_gemm_advanced(device_queue, layout_val, opA, opB, A,
-                                              columns)
-    @ccall liboneapi_support.onemklXsparse_optimize_gemm_advanced(device_queue::syclQueue_t,
-                                                                  layout_val::onemklLayout,
-                                                                  opA::onemklTranspose,
-                                                                  opB::onemklTranspose,
-                                                                  A::matrix_handle_t,
-                                                                  columns::Int64)::Cint
+    return @ccall liboneapi_support.onemklXsparse_optimize_gemm(
+        device_queue::syclQueue_t,
+        opA::onemklTranspose,
+        A::matrix_handle_t
+    )::Cint
+end
+
+function onemklXsparse_optimize_gemm_advanced(
+        device_queue, layout_val, opA, opB, A,
+        columns
+    )
+    return @ccall liboneapi_support.onemklXsparse_optimize_gemm_advanced(
+        device_queue::syclQueue_t,
+        layout_val::onemklLayout,
+        opA::onemklTranspose,
+        opB::onemklTranspose,
+        A::matrix_handle_t,
+        columns::Int64
+    )::Cint
 end
 
 function onemklXsparse_optimize_trsm(device_queue, uplo_val, opA, diag_val, A)
diff --git a/test/onemkl.jl b/test/onemkl.jl
index e5b6541..a4fd56c 100644
--- a/test/onemkl.jl
+++ b/test/onemkl.jl
@@ -1132,7 +1132,7 @@ end
 
                     alpha = rand(T)
                     beta = rand(T)
-                    oneMKL.sparse_optimize_gemm!(transa, dA)
+                        oneMKL.sparse_optimize_gemm!(transa, dA)
                     oneMKL.sparse_gemm!(transa, transb, alpha, dA, dB, beta, dC)
                     @test alpha * opa(A) * opb(B) + beta * C ≈ collect(dC)
                 end

@michel2323
Copy link
Author

Rebased on @amontoison's #511 because it is related.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants